﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class РаботаСДиалогамиКлиент
	{
		////////////////////////////////////////////////////////////////////////////////
		// ВЫБОР ЗНАЧЕНИЙ В ФОРМЕ
		// СПЕЦИФИКАЦИИ
		// Процедура выполняет стандартные действия при начале выбора спецификации в формах документов.
		//
		// Параметры:
		//  Номенклатура - ссылка на справочник, определяет продукцию, которая указана в спецификации;
		//  ЭлементФормы             - элемент формы документа, который надо заполнить;
		//  СтандартнаяОбработка,    - булево, признак выполнения стандартной (системной) обработки события
		//                             начала выбора для данного элемента формы документа.
		//

		public void НачалоВыбораЗначенияСпецификации(/*Номенклатура, ЭлементФормы, СтандартнаяОбработка, ТолькоАктивные = Истина*/)
		{
			//СтандартнаяОбработка    = Ложь;
			//ПараметрыФормы = Новый Структура("Номенклатура", Номенклатура);
			//ПараметрыФормы.Вставить("ТолькоАктивные", ТолькоАктивные);
			//ОткрытьФорму("Справочник.СпецификацииНоменклатуры.Форма.ФормаВыбораУправляемая", ПараметрыФормы, ЭлементФормы);
		}
		// НачалоВыбораЗначенияСпецификации()
		////////////////////////////////////////////////////////////////////////////////
		// ИНТЕРАКТИВНЫЕ ДЕЙСТВИЯ ПРИ ЗАПОЛНЕНИИ ЗНАЧЕНИЙ В ДОКУМЕНТАХ
		// ПОДРАЗДЕЛЕНИЯ ОРГАНИЗАЦИЙ

		public void ЗаполнитьПодразделениеОрганизации(/*Объект*/)
		{
			/*// Получим с сервера подходящее подразделение организации
*/
			//ПодразделениеОрганизации = РаботаСДиалогамиСервер.ПодразделениеОрганизации(Объект.Подразделение, Объект.Организация);
			if(true/*НЕ ЗначениеЗаполнено(ПодразделениеОрганизации)*/)
			{
			}
			if(true/*Объект.ПодразделениеОрганизации = ПодразделениеОрганизации*/)
			{
			}
			//Объект.ПодразделениеОрганизации = ПодразделениеОрганизации;
		}
		// ЕДИНИЦЫ ИЗМЕРЕНИЯ МЕСТ
		// Если не задана единица мест, то количество мест не имеет смысла и должно быть очищено
		// Следует вызывать при изменении единицы мест

		public void ОчиститьКоличествоМестПриОчисткеЕдиницыМест(/*СтрокаТабличнойЧасти*/)
		{
			if(true/*СтрокаТабличнойЧасти.КоличествоМест <> 0 И НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест)*/)
			{
				//СтрокаТабличнойЧасти.КоличествоМест = 0;
			}
		}
		// Рассчитывает количество исходя из количества мест

		public void РассчитатьКоличествоТабЧасти(/*СтрокаТабличнойЧасти, СведенияЕдиницаИзмеренияМест = Неопределено*/)
		{
			/*// Рассчитываем, только если указана единица измерения мест
*/
			if(true/*НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест)*/)
			{
			}
			/*// Если не указана единица измерения и коэффициент, то количество не имеет смысла
*/
			if(true/*СтрокаТабличнойЧасти.Коэффициент = 0*/)
			{
				//СтрокаТабличнойЧасти.Количество = 0;
			}
			/*// Получим с сервера сведения об единице измерения мест
*/
			if(true/*СведенияЕдиницаИзмеренияМест = Неопределено*/)
			{
				//СведенияЕдиницаИзмеренияМест = РаботаСДиалогамиСервер.СведенияЕдиницаИзмеренияМест(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест);
			}
			/*// Количество мест не имеет смысла
*/
			if(true/*СведенияЕдиницаИзмеренияМест.Коэффициент = 0*/)
			{
				//СтрокаТабличнойЧасти.Количество = 0;
			}
			if(true/*СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест*/)
			{
				//СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.КоличествоМест;
			}
		}
		// РассчитатьКоличествоТабЧасти()
		// Рассчитывает количество мест исходя из количества

		public void РассчитатьКоличествоМестТабЧасти(/*СтрокаТабличнойЧасти, СведенияЕдиницаИзмеренияМест = Неопределено*/)
		{
			/*// Рассчитываем, только если указана единица измерения мест
*/
			if(true/*НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест)*/)
			{
				/*// Без указания единицы мест больше ничего не делаем
*/
			}
			/*// Если не указана единица измерения и коэффициент, пересчет невозможен
*/
			if(true/*СтрокаТабличнойЧасти.Коэффициент = 0*/)
			{
			}
			/*// Получим с сервера сведения об единице измерения мест
*/
			if(true/*СведенияЕдиницаИзмеренияМест = Неопределено*/)
			{
				//СведенияЕдиницаИзмеренияМест = РаботаСДиалогамиСервер.СведенияЕдиницаИзмеренияМест(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест);
			}
			/*// Количество мест не имеет смысла
*/
			if(true/*СведенияЕдиницаИзмеренияМест.Коэффициент = 0*/)
			{
				//СтрокаТабличнойЧасти.КоличествоМест = 0;
			}
			if(true/*СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест*/)
			{
				/*// Используем переменную, так как в неё потребуется записать неокругленное значение, а затем округлить по специальным правилам.
*/
				//КоличествоМест = СтрокаТабличнойЧасти.Количество;
			}
			if(true/*Цел(КоличествоМест) <> КоличествоМест*/)
			{
				/*//Округление КоличествоМест в соответствии с настройками единицы ЕдиницаИзмеренияМест
*/
				if(true/*СведенияЕдиницаИзмеренияМест.ПредупреждатьОНецелыхМестах*/)
				{
					/*//Формирование предупреждения о нецелом количестве мест
*/
					//ПоказатьОповещениеПользователя(Нстр("ru='Расчет количества мест'"), , Нстр("ru='Количество мест округлено'"));
				}
				if(true/*СведенияЕдиницаИзмеренияМест.ПорогОкругления = 0*/)
				{
					/*//Округление в сторону уменьшения
*/
					//КоличествоМест = Цел(КоличествоМест);
				}
			}
			/*// Конец обработки нецелого значения
*/
			//СтрокаТабличнойЧасти.КоличествоМест = КоличествоМест;
		}
		// РассчитатьКоличествоМестТабЧасти()
		// СКЛАД ОРДЕР
		// Процедура в зависимости от вида поступления устанавливает тип для реквизита "СкладОрдер"
		//
		// Параметры:
		//  ДокументОбъект - объект документа,
		//  ЭлементыФормы  - элементы формы,
		//	ЭтоПоступлениеПоОрдеру - булево, признак того что ВидПоступления = ПоОрдеру
		//		передается в виде параметра, чтобы не пришлось использовать ПредопределенноеЗначение() для определения вида поступления
		//  ВидОперации    - строка, определяет вид операции,возможнве значения "Поступление", "Возврат",
		//                   по умолчанию "Поступление".
		//

		public void УстановитьТипСкладаОрдера(/*ДокументОбъект, ЭлементыФормы, ЭтоПоступлениеПоОрдеру, ВидОперации = "Поступление"*/)
		{
			if(true/*ЭтоПоступлениеПоОрдеру*/)
			{
				if(true/*ТипЗнч(ДокументОбъект.СкладОрдер)<>Тип("ДокументСсылка.ПриходныйОрдерНаТовары")*/)
				{
					//ОписаниеТипов = Новый ОписаниеТипов("ДокументСсылка.ПриходныйОрдерНаТовары");
					//ДокументОбъект.СкладОрдер = ОписаниеТипов.ПривестиЗначение(ДокументОбъект.СкладОрдер);
				}
				//ЭлементыФормы.СкладОрдер.Подсказка = НСтр("ru = 'В этом поле необходимо указать приходный ордер, по которому ранее было оформлено поступление товаров.'");
			}
		}
		// УстановитьТипСкладаОрдера()
		// Рассчитывает сумму в строке табличной части документа
		//
		// Параметры:
		//  СтрокаТабличнойЧасти - строка табличной части документа,
		//  СтруктураПараметров - структура, содержащая сведения о наличии реквизитов таб.части
		//  ВидРасчета           - "Со всеми скидками", сумма минус скидки;
		//                         "Без учета ручной скидки", сумма минус автоматические скидки;
		//                         "Без учета скидок", сумма (Цена * Количество);
		//

		public void РассчитатьСуммуТабЧасти(/*СтрокаТабличнойЧасти, СтруктураПараметров = Неопределено*/)
		{
			//Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
			//СуммаСкидки = 0;
			if(true/*СтруктураПараметров <> Неопределено И СтруктураПараметров.Свойство("ЕстьПроцентАвтоматическихСкидок")*/)
			{
				//СуммаСкидки = Сумма * СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок / 100;
			}
			if(true/*СтруктураПараметров <> Неопределено И СтруктураПараметров.Свойство("ЕстьПроцентСкидкиНаценки")*/)
			{
				//СуммаСкидки = СуммаСкидки + (Сумма * СтрокаТабличнойЧасти.ПроцентСкидкиНаценки / 100);
			}
			//СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;
		}
		// РассчитатьСуммуТабЧасти()
		// Расчет суммы НДС
		//
		// Параметры:
		//  СтрокаТабличнойЧасти - строка табличной части документа,
		//  ПроцентыСтавокНДС 		- соответствие между элементами перечисления СтавкиНДС и числом (% ставки)
		//  СтруктураПараметров       - структура, содержащая сведения из реквизитов шапки.
		//

		public void РассчитатьСуммуНДСТабЧасти(/*СтрокаТабличнойЧасти, ПроцентыСтавокНДС, СтруктураПараметров*/)
		{
			if(true/*НЕ СтруктураПараметров.УчитыватьНДС ИЛИ СтрокаТабличнойЧасти.Сумма = 0*/)
			{
				//СтрокаТабличнойЧасти.СуммаНДС = 0;
			}
			//ПроцентНДС = ПроцентыСтавокНДС.Получить(СтрокаТабличнойЧасти.СтавкаНДС);
			if(true/*ПроцентНДС = Неопределено*/)
			{
				//ПроцентНДС = 0;
			}
			if(true/*СтруктураПараметров.СуммаВключаетНДС*/)
			{
				//СуммаБезНДС = 100 * СтрокаТабличнойЧасти.Сумма / (100 + ПроцентНДС);
				//СуммаНДС = СтрокаТабличнойЧасти.Сумма - СуммаБезНДС;
			}
			//СтрокаТабличнойЧасти.СуммаНДС = СуммаНДС;
		}
		// РассчитатьСуммуНДСТабЧасти()
		// Процедура выполняет стандартные действия при изменении суммы
		// в строке табличной части документа.
		//
		// Параметры:
		//  СтрокаТабличнойЧасти 					- строка табличной части документа,
		//  ПересчитыватьСкидку				 		- признак необходимости пересчета скидки для данного пользователя,

		public void ПриИзмененииСуммыТабЧасти(/*СтрокаТабличнойЧасти, ПересчитыватьСкидкуДокумента = Ложь*/)
		{
			//ЕстьРеквизитПроцентСкидкиНаценки = СтрокаТабличнойЧасти.Свойство("ПроцентСкидкиНаценки");
			//ЕстьРеквизитПроцентАвтоматическихСкидок = СтрокаТабличнойЧасти.Свойство("ПроцентАвтоматическихСкидок");
			if(true/*СтрокаТабличнойЧасти.Количество=0*/)
			{
				//СтрокаТабличнойЧасти.Цена = 0;
			}
			/*//Обработка ситуации когда ЕстьРеквизитПроцентСкидкиНаценки
*/
			//ПроцентАвтоматическихСкидок = 0;
			if(true/*ЕстьРеквизитПроцентАвтоматическихСкидок*/)
			{
				//ПроцентАвтоматическихСкидок = СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок;
			}
			if(true/*ПересчитыватьСкидкуДокумента*/)
			{
				if(true/*(СтрокаТабличнойЧасти.Цена = 0)*/)
				{
					//СтрокаТабличнойЧасти.ПроцентСкидкиНаценки = 0;
					//ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Нстр("ru = 'Цена равна 0, после изменения суммы установлена нулевая скидка!'"));
				}
			}
		}
		// ПриИзмененииСуммыТабЧасти()
		//Процедура заполняет реквизиты КурсВзаиморасчетов и КратностьВзаиморасчетов

		public void ЗаполнитьКурсИКратностьДокумента(/*ДокументОбъект, ВалютаРегламентированногоУчета*/)
		{
			//ЗначенияДляЗаполнения = Новый Структура("КурсВзаиморасчетов, КратностьВзаиморасчетов", 0, 0);
			if(true/*ЗначениеЗаполнено(ДокументОбъект.ВалютаДокумента)*/)
			{
				if(true/*ДокументОбъект.ВалютаДокумента = ВалютаРегламентированногоУчета*/)
				{
					//ЗначенияДляЗаполнения.КурсВзаиморасчетов = 1;
					//ЗначенияДляЗаполнения.КратностьВзаиморасчетов = 1;
				}
			}
			//ЗаполнитьЗначенияСвойств(ДокументОбъект, ЗначенияДляЗаполнения);
		}
		////////////////////////////////////////////////////////////////////////////////
		// ЗАПОЛНЕНИЕ ДОКУМЕНТОВ
		// Инициирует выбор пользователем настройки, затем открывает форму объекта,
		// заполненного по выбранной настройке
		//
		// Параметры:
		//  КлючОбъекта - ключ заполняемого объекта, например - "Документ.ОтчетМастераСмены", "Справочник.Номенклатура"

		public void ОткрытьФормуЗаполненнуюПоНастройке(/*КлючОбъекта*/)
		{
			/*// Откроем форму выбора настройки с "отбором" по виду документа
*/
			//ИмяФормы = "ХранилищеНастроек.ДанныеФорм.Форма.ФормаЗагрузки";
			//ВыборНастроек = ОткрытьФормуМодально(ИмяФормы,	Новый Структура("КлючОбъекта", КлючОбъекта));
			if(true/*ВыборНастроек <> Неопределено*/)
			{
				/*// Если пользователь выбрал настройку, то откроем форму нового объекта, заполненного на основании выбранной настройки
*/
				//ОткрытьФорму(КлючОбъекта + ".ФормаОбъекта", Новый Структура("Основание", ВыборНастроек.КлючНастроек));
			}
		}
		// Универсальная процедура, которая инициирует механизм подбора
		// номенклатуры в документы (открывает основную форму обработки подбор).
		//
		// Параметры:
		//  ФормаДокумента - форма документа, в который осуществляется подбор,
		//  СтруктураПараметров - параметры, которые передаются в форму подбора.
		//

		public void ОткрытьПодборНоменклатуры(/*ФормаДокумента, СтруктураПараметров*/)
		{
			//СтруктураПараметров.Вставить("ЗакрыватьПриВыборе", Ложь);
			/*// По умолчанию услуги нелья подбирать
*/
			if(true/*НЕ СтруктураПараметров.Свойство("ОтборУслугПоСправочнику")*/)
			{
				//СтруктураПараметров.Вставить("ОтборУслугПоСправочнику", Истина);
			}
			if(true/*НЕ СтруктураПараметров.Свойство("ПодбиратьУслуги")*/)
			{
				//СтруктураПараметров.Вставить("ПодбиратьУслуги", Ложь);
			}
			//ОткрытьФормуМодально("ОбщаяФорма.ФормаПодбораНоменклатурыУправляемая", СтруктураПараметров, ФормаДокумента);
		}
		//
		// Спрашивает пользователя, перезаполнять ли табличную часть, если
		// в ней уже есть данные.
		//
		// Параметры
		//  ТабличнаяЧасть - заполняемая табличная часть
		//
		// Возвращаемое значение
		//  Истина - пользователь отказался от заполнения
		//  Ложь   - в табличной части нет строк или пользователь согласился с их удалением

		public object ПользовательОтказалсяПерезаполнитьТабличнуюЧасть(/*ТабличнаяЧасть*/)
		{
			if(true/*ТабличнаяЧасть.Количество() > 0*/)
			{
				//ТекстВопроса = Нстр("ru = 'Перед заполнением табличная часть будет очищена. Заполнить?'");
				//Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
				if(true/*Ответ <> КодВозвратаДиалога.Да*/)
				{
				}
			}
			return null;
		}
	}
}
